import type { Stats } from "fs";

/**
 * 配置接口
 */
export interface IConfig {
    /** 根路径 */
    rootPath: string;
}

/**
 * 文件系统接口
 */
export interface IFileSystem {
    config: IConfig;

    /**
     * 读取文件内容
     * @param path 文件路径
     * @returns 返回文件内容的Buffer
     */
    readFile(path: string): Promise<Buffer | boolean>;

    /**
     * 写入文件
     * @param path 文件路径
     * @param data 要写入的数据，可以是字符串或Buffer
     * @returns 返回一个Promise，当写入成功时resolve
     */
    writeFile(path: string, data: string | Buffer): Promise<boolean>;

    /**
     * 追加数据到文件
     * @param path 文件路径
     * @param data 要追加的数据，可以是字符串或Buffer
     * @returns 返回一个Promise，当追加成功时resolve
     */
    appendFile(path: string, data: string | Buffer): Promise<boolean>;

    /**
     * 删除文件
     * @param path 文件路径
     * @returns 返回一个Promise，当删除成功时resolve
     */
    deleteFile(path: string): Promise<boolean>;

    /**
     * 创建目录
     * @param path 目录路径
     * @returns 返回一个Promise，当创建成功时resolve
     */
    createDirectory(path: string): Promise<boolean>;

    /**
     * 删除空目录
     * @param path 目录路径
     * @returns 返回一个Promise，当删除成功时resolve
     */
    removeDirectory(path: string): Promise<boolean>;

    /**
     * 读取目录内容
     * @param path 目录路径
     * @returns 返回一个包含目录内容的字符串数组
     */
    readDirectory(path: string): Promise<string[] | boolean>;

    /**
     * 重命名文件或目录
     * @param oldPath 当前路径
     * @param newPath 新路径
     * @returns 返回一个Promise，当重命名成功时resolve
     */
    renameItem(oldPath: string, newPath: string): Promise<boolean>;

    /**
     * 获取文件状态
     * @param path 文件路径
     * @returns 返回一个包含文件状态信息的Stats对象
     */
    getFileStatus(path: string): Promise<Stats>;
}
